#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
	//转义字符:把原来字符的意义转变


	// \n : 换行符
	printf("abcndef\n");
	printf("abc\ndef\n");

	// \? : 在书写连续多个问号的时候使用，防止被解析为三字母词(旧),在新的编译器无法验证
			// ??) --> ]
			// ??( --> [
			// (are you ok??)会被打印为(are you ok]

	// \' : 表示字符单引号'
	printf("%c\n",'\'');//转变中间的单引号，让他只是一个没有功能只有内容的单引号

	// \" : 表示字符双引号
	printf("%s\n", "\"");//同上

	// \\:用于表示一个反斜杠,防止他被解析为一个转义序列符
	printf("c:\\test\\bbc\\test.c\n");//让反斜杠没有功能只有内容
	//表示一个路径的字符串经常使用\\

	// \a : 报警，使终端发出警报声或出现闪烁，或者两者同时发生
	printf("\a");

	// \b : 退格符.使光标退一格
	printf("abcde\b");
	printf("f\ng\b");
	printf("xxx\n");
	//运行结果为:先打印出abcde光标在e前，接着打印f把e给覆盖掉，然后换行打印出g光标在g前，最后打印xxx将g给覆盖掉.建议用f10查看该过程.
	//想想如果\b后面加了\n呢？或者是在\b前加了\n

	// \f : 换页符，光标移到下一页，在现代系统上已经反映不出来，行为类似于\v
	
	// \r : 回车符: 光标移动到同一行的开头,但是第一个字符会被删掉 (Home)
	printf("abcd\r\n");

	// \t : 制表符,光标移动到下一个水平制表位，长度是4或8的倍数。一般在输出信息对齐的时候使用.
	printf("abc\tde\tfghigk\n");
	printf("sadho\tsalxc\txxxxx\n");//窝趣，全对齐了！
	//当前演示的环境下 \t 占据八个字符
	printf("asljdklsajn\t\tslkajdlklkx\n");
	printf("spjpxupiz\t\tsdjajkbkjbnl\n");

	// \v : 垂直分隔符,光标移动到下一个垂直制表位，通常是下一行的同一列.(用的少）

	//下面两种转义字符可以理解为：字符的8进制或者16进制表示形式
	//1. \ddd : d d d表示1~3个八进制数字。例如：\130 表示字符X
	//2. \xdd : d d表示两个十六进制数字。 例如: \x30 表示字符0
	printf("\130\n"); printf("%c\n", '\130');
	printf("\x30\n"); printf("%c\n", '\x30');

	// \0 : null字符，代表没有内容。\0 就是 \ddd 这类转义字符的一种，其ASCII码值就是0

	printf("%d\n", strlen("abc"));//abc\0 只数\0前面的字符个数
	printf("%d\n", strlen("c:\test\120\abc\test.c"));// \t \120 \a \t 均只算一个

	//语句和语句的分类:
	//一、空语句：一个分号就能构成一条语句 就是空语句
	;  //这个东西就是一条语句，什么内容都没有,所以是空语句.

	//二、表达式语句：就是在表达式的后面加上分号
	3 + 5;//表达式语句
	int a, b;
	a + b;//表达式语句

	//三、函数调用语句：函数调用时会加上分号，就是函数调用语句
	printf("hehe\n");//这个就是函数调用语句 调用一个函数的一条语句

	//四、复合语句:复合语句就是好代码块，成对括号中的代码就构成一个代码块，也称复合语句
	//诶就是大括号里套一个大括号{}

	//五、控制语句：用于控制程序的执行流程，从而实现程序的各种结构方式(C语言有九种控制语句)
	//C语言支持三种结构：
	//1.顺序结构:按照顺序从开始到结束
	//2.选择结构:从A到B有多种不同的方式 可以有多种选择:涉及到判断if switch(分支语句）
	//3.循环结构:同一件事情重复做while  for  do while(循环语句)
	//控制语句可以分为以下三种:
	//1.条件判断语句（也叫分支语句):if switch
	//2.循环执行语句:do while  while  for
	//3.转向语句:break  goto  continue  return
	//后期会有介绍喵

	//注释:要强调的一点就是不要写没有必要的注释
	//写代码的时候留下有必要的注释，养成好习惯喵
	// /**/这种注释形式不支持嵌套
	// 放在双引号里的注释会被当成内容 不再有注释功能

	//数据类型:
		//内置类型:(C语言本身就有)
			//字符型:char
			//整型: short int long   long long
			//浮点型: float double  long double
			//布尔类型:_Bool---->bool
		//自定义类型:(根据自己的需要创造类型)
			//数组
			//结构体:struct
			//枚举:enum
			//联合体:union

	//各种数据类型的长度(可以把数据类型理解为有有限空间的模具):
	//可用sizeof求出各个数据类型的长度，sizeof的计算结果是size_t类型的, 要用%zu打印到屏幕上
	int m = 18;
	sizeof m;//后面是变量名，括号可以省略
	sizeof(int);//后面是数据类型，括号不可以省略
	printf("%zu\n",sizeof(int));
	printf("%zu\n",sizeof m );
	printf("%zu\n",sizeof 1+1);
	printf("%d\n", sizeof(int));//用%d打印有可能会报错(不过这里没有报错)

	printf("以下是各个数据类型所占空间大小 单位:字节(byte)\n%zu\n", sizeof(char));//1
	printf("%zu\n", sizeof(_Bool));											   //1
	printf("%zu\n", sizeof(short));											   //2
	printf("%zu\n", sizeof(int));											   //4
	printf("%zu\n", sizeof(long));											   //4
	printf("%zu\n", sizeof(long long));										   //8
	printf("%zu\n", sizeof(float));											   //4
	printf("%zu\n", sizeof(double));										   //8
	printf("%zu\n", sizeof(long double));									   //8
	//1byte=8bit
	//long长度有可能是8个字节
	//C语言标准规定:long>=int   long double>=double
	
	
	short c = 8;
	int s = 5;
	printf("%zu\n", sizeof(c = s + 3));//打印c的类型
	printf("%d\n", c);//sizeof中的表达式不计算

	//signed和unsigned：修饰整型家族（字符型和整型）数据类型的关键字
	//signed(有符号的)关键字，表示一个类型带有正负号，包含负值
	//unsigned(无符号的)关键字，表示该类型不带有正负号，只能表示0和正整数
	//int = [signed] int  这是默认的
	//short = [signed] int
	// long   long long 同上
	//char != [signed] char (只有这种类型特殊)
	//整数变量声明为unsigned的好处是，同样长度的内存能够表示的最大整数值翻了一倍(把负的空间给正的了)

 

			
	







0;
	ret
}